/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/*Создать приложение аналогичное терминалу в *nix или 
командной строке в Windows. После запуска из консоли 
выводится общая помощь с перечислением команд и 
их кратким описанием. Список команд:
	dir <директория> - вывод всего содержимого директории
	copy <src> <dest> - копирование файла или директории
	delete <src> - удаление файла или директории
	rename <src> <new_name> - переименование файла или директории
	mkdir <src> - создание директории
	mkfile <src> - создание файла
	sort <src> <type> - сортировка содержимого директории

В обязательном порядке должны быть реализованы интерфейсы,
перечисленные в приложенном файле. Интерфейсы поместить в 
пакет с именем Filesystem.*/
package FileSystem;

import Printers.PrintFile;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 *
 * @author asfeor
 */
interface Sort
{
	Collection sortByName (File dir, int type);/* 0 - ASC – по возрастанию и 1 - DESC – по убыванию */
	Collection sortBySize (File dir, int type);
	Collection sortByLastModify (File dir, int type);
}
public class Sorting implements Sort{
    private  int ASC=0,
                 DESC=1,
                 Sort_by_Size=1,
                 Sort_by_LastModification=2,
                 Sort_by_Name=3,
                 Sort_by_ASC=0,
                 Sort_by_DESC=1;
    private List<typeCompaer> sortList=new ArrayList<typeCompaer>();

    public boolean sort( String src,int sort_Type, int sort_vector){
      try {   
      File f=new File(src);
      if (f.exists()&&f.isDirectory()){
        if (sort_Type==Sort_by_Name) {
            sortByName(f, sort_vector);
        }
        if (sort_Type==Sort_by_LastModification) {
            sortByLastModify(f, sort_vector);
        }
        if (sort_Type==Sort_by_Size) {
            sortBySize(f, sort_vector);
        }
      }
      if (f.exists()&&f.isFile()) new PrintFile().print(f);
      return true;
      } catch(Exception ex) {return false;}
    }
    @Override
    public Collection sortByName(File dir, int type) {
        String sDirList[]=dir.list();
        String param[][]=new String[sDirList.length][3];
        for (int i=0;  i<sDirList.length; i++){
            param[i][0]=sDirList[i];
            param[i][1]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).length();
            param[i][2]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).lastModified();
            sortList.add(new typeCompaer(param[i][0], param[i][1], param[i][2]));
           
                    
        }
         if (type==ASC) Collections.sort(sortList, typeCompaer.Sort_by_name_ASC); 
             else Collections.sort(sortList, typeCompaer.Sort_by_name_DESC);
        return sortList;
    }

    @Override
    public Collection sortBySize(File dir, int type) {
                String sDirList[]=dir.list();
        String param[][]=new String[sDirList.length][3];
        for (int i=0;  i<sDirList.length; i++){
            param[i][0]=sDirList[i];
            param[i][1]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).length();
            param[i][2]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).lastModified();
            sortList.add(new typeCompaer(param[i][0], param[i][1], param[i][2]));
           
                    
        }
         if (type==ASC) Collections.sort(sortList, typeCompaer.Sort_by_Size_ASC); 
             else Collections.sort(sortList, typeCompaer.Sort_by_Size_DESC);
        return sortList;
    }

    @Override
    public Collection sortByLastModify(File dir, int type) {
                String sDirList[]=dir.list();
        String param[][]=new String[sDirList.length][3];
        for (int i=0;  i<sDirList.length; i++){
            param[i][0]=sDirList[i];
            param[i][1]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).length();
            param[i][2]=""+new File(dir.getAbsoluteFile()+File.separator+sDirList[i]).lastModified();
            sortList.add(new typeCompaer(param[i][0], param[i][1], param[i][2]));
           
                    
        }
         if (type==ASC) Collections.sort(sortList, typeCompaer.Sort_by_Last_Modification_ASC); 
             else Collections.sort(sortList, typeCompaer.Sort_by_Last_Modification_DESC);
        return sortList;
    }
}
